#ifndef __INSTRUCTION_H
#define __INSTRUCTION_H

#include <string>
#include <vector>
#include <memory>
#include "MyLogger.h"
#include "PersistStorage.h"

class Instruction
{
public:
    static std::shared_ptr<MyLogger> logger;
    static std::shared_ptr<PersistStorage> config;
protected:
    std::string instName;
    std::string helpInfo;
    std::string argsInfo;
public:
    Instruction() = default;
    virtual ~Instruction() = default;
    virtual void Execute(std::vector<std::string> &args) = 0;
    static void SetLogger(std::shared_ptr<MyLogger> &logger);
    static void SetConfig(std::shared_ptr<PersistStorage> &config);
    const std::string &GetInstName();
    const std::string &GetArgs();
    virtual std::string GetHelp() = 0;
};

#endif
